﻿#pragma once
#include "zyCommandCtrol.h"

namespace BlackMoonUI {

	class zyEditBox : public  zyCommandCtrol
	{
	public:
		zyEditBox();
		~zyEditBox();
		void OnNCDestroy();
		static void  WINAPI zyEditBox_Destroy(zyObject* obj);
		static LRESULT WINAPI zyEditBox_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		static LRESULT WINAPI zyEditBox_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle);
		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 26 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 26 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		void 取光标所在行列(int& 参数_行号, int& 参数_列号);
		int 取坐标字符(int 参数_水平坐标, int 参数_垂直坐标);
		POINT 取字符坐标(int 参数_字符位置);
		int 取行号(int 参数_字符位置);
		int 取行首位置(int 参数_行号 = -1);
		int 取行文本长度(int 参数_行号);
		std::wstring 取行文本(int 参数_行号);
		int 取行数();
		BOOL 滚动到光标();
		BOOL 滚动(int 参数_水平字符数, int 参数_行数);
		int 取可见第一行();
		void 置内容改变标志(BOOL 参数_是否改变);
		BOOL 内容是否改变();
		int 删除();
		int 粘贴();
		int 复制();
		int 剪切();
		int 清除撤销缓冲区();
		void 撤销();
		BOOL 可否撤销();
		void 移动(int 参数_左边 = -1, int 参数_顶边 = -1, int 参数_宽度 = -1, int 参数_高度 = -1, BOOL 参数_是否立即重画 = TRUE);
		BOOL 垂直居中(BOOL 参数_垂直居中);
		BOOL 垂直居中();
		void 置矩形(RECT 参数_矩形);
		RECT 取矩形();
		int 最大长度(int 参数_最大长度);
		void 替换文本(const std::wstring& 参数_文本);
		void 添加文本(const std::wstring& 参数_文本);
		std::wstring 内容(const std::wstring& 参数_内容);
		void 取被选择区(int& 参数_起始位置, int& 参数_结束位置);
		void 置被选择文本(int 参数_起始位置, int 参数_结束位置);
		BOOL 置只读属性(BOOL 参数_属性值 = TRUE);
		void 置密码遮盖符(const wchar_t* 参数_遮盖符);
		std::wstring 取密码遮盖符();
		//OnTextChange 返回值：无 （整数型 hWnd，整数型 id）
		void 事件_内容被改变(TRegEvent* 参数_事件指针);
	};

}

